display: Don't return NULL in get_primary_monitor()
authorBenjamin Otte <otte@redhat.com>
Sat, 3 Sep 2016 16:33:30 +0000 (18:33 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 16 Oct 2016 16:17:21 +0000 (18:17 +0200)
Nobody ever does a NULL check there so all that causes is crashes. So
we better return a non-primary monitor than NULL.

Fixes gdk-wayland always returning NULL.

gdk/gdkdisplay.c

index ed0e65f956c33fbf537254ecb824276ff9ec6af3..5d49aad9f10242e3457e3dd05690f07b9cf7514a 100644 (file)
@@ -143,6 +143,12 @@ gdk_display_real_get_default_seat (GdkDisplay *display)
   return display->seats->data;
 }
 
+static GdkMonitor *
+gdk_display_real_get_primary_monitor (GdkDisplay *display)
+{
+  return gdk_display_get_monitor (display, 0);
+}
+
 static void
 gdk_display_class_init (GdkDisplayClass *class)
 {
@@ -160,6 +166,8 @@ gdk_display_class_init (GdkDisplayClass *class)
   class->event_data_free = gdk_display_real_event_data_free;
   class->get_default_seat = gdk_display_real_get_default_seat;
 
+  class->get_primary_monitor = gdk_display_real_get_primary_monitor;
+
   /**
    * GdkDisplay::opened:
    * @display: the object on which the signal is emitted
@@ -2597,8 +2605,13 @@ gdk_display_get_monitor (GdkDisplay *display,
  * manager to place the windows, specialized desktop applications
  * such as panels should place themselves on the primary monitor.
  *
- * Returns: (nullable) (transfer none): the primary monitor, or %NULL if no primary
- *     monitor is configured by the user
+ * If no monitor is the designated primary monitor, any monitor
+ * (usually the first) may be returned. To make sure there is a dedicated
+ * primary monitor, use gdk_monitor_is_primary() on the returned monitor.
+ *
+ * Returns: (transfer none): the primary monitor, or any monitor if no
+ *     primary monitor is configured by the user
+ *
  * Since: 3.22
  */
 GdkMonitor *
@@ -2606,10 +2619,7 @@ gdk_display_get_primary_monitor (GdkDisplay *display)
 {
   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
 
-  if (GDK_DISPLAY_GET_CLASS (display)->get_primary_monitor)
-    return GDK_DISPLAY_GET_CLASS (display)->get_primary_monitor (display);
-
-  return NULL;
+  return GDK_DISPLAY_GET_CLASS (display)->get_primary_monitor (display);
 }
 
 /**